using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios
{
	public partial class AgromotorsiteDAO : DAO
	{

		public static ConteudoestaticoVO getConteudoestatico(int? idConteudoEstatico, string nome)
		{
			ConteudoestaticoVO conteudoestaticoVO = null;
			List<ConteudoestaticoVO> listConteudoestaticoVOs = getConteudoestaticos(idConteudoEstatico, nome);
			if (listConteudoestaticoVOs != null && listConteudoestaticoVOs.Count > 0)
			{
				conteudoestaticoVO = listConteudoestaticoVOs[0];
			}
			return conteudoestaticoVO;
		}

		public static ConteudoestaticoVO getConteudoestatico(int? idConteudoEstatico)
		{
			return getConteudoestatico(idConteudoEstatico, null);
		}

		public static List<ConteudoestaticoVO> getConteudoestaticos()
		{
			return getConteudoestaticos(null, null);
		}

		public static List<ConteudoestaticoVO> getConteudoestaticos(int? idConteudoEstatico)
		{
			return getConteudoestaticos(idConteudoEstatico, null);
		}

		public static List<ConteudoestaticoVO> getConteudoestaticos(int? idConteudoEstatico, string nome)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT coe.idConteudoEstatico as coe_idConteudoEstatico, coe.conteudo as coe_conteudo, coe.conteudoEdicao as coe_conteudoEdicao, coe.nome as coe_nome, coe.Cadastro as coe_Cadastro, coe.CadastradoPor as coe_CadastradoPor, coe.Edicao as coe_Edicao, coe.EditadoPor as coe_EditadoPor  ");
			query.AppendLine("FROM conteudoestatico as coe ");
			if (idConteudoEstatico != null)
			{
				query.AppendLine(where + "coe.idConteudoEstatico=@idConteudoEstatico ");
				where = "AND ";
			}
			if (nome != null)
			{
				query.AppendLine(where + "coe.nome LIKE @nome ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY coe.nome ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			if (idConteudoEstatico!= null) cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", idConteudoEstatico));
			if (nome!= null) cmd.Parameters.Add(getParameter(cmd, "@nome", "%"+nome+"%"));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<ConteudoestaticoVO> listConteudoestatico = new List<ConteudoestaticoVO>();

				while (reader.Read())
				{
					ConteudoestaticoVO conteudoestaticoVO = ConteudoestaticoVO.CreateVO();
					conteudoestaticoVO.idConteudoEstatico = reader.GetInt32(reader.GetOrdinal("coe_idConteudoEstatico"));
					conteudoestaticoVO.conteudo = reader.GetString(reader.GetOrdinal("coe_conteudo"));
					conteudoestaticoVO.conteudoEdicao = reader.GetString(reader.GetOrdinal("coe_conteudoEdicao"));
					conteudoestaticoVO.nome = reader.GetString(reader.GetOrdinal("coe_nome"));
					conteudoestaticoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("coe_Cadastro"));
					conteudoestaticoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("coe_CadastradoPor"));
					conteudoestaticoVO.edicao = reader.GetDateTime(reader.GetOrdinal("coe_Edicao"));
					conteudoestaticoVO.editadoPor = reader.GetString(reader.GetOrdinal("coe_EditadoPor"));


					listConteudoestatico.Add(conteudoestaticoVO);
				}
				reader.Close();
				return listConteudoestatico;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

		public static void setConteudoestatico(ConteudoestaticoVO conteudoestaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE conteudoestatico ");
			query.AppendLine("SET conteudo=@conteudo, conteudoEdicao=@conteudoEdicao, nome=@nome,  Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idConteudoEstatico=@idConteudoEstatico ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", conteudoestaticoVO.idConteudoEstatico));
			cmd.Parameters.Add(getParameter(cmd, "@conteudo", conteudoestaticoVO.conteudo));
			cmd.Parameters.Add(getParameter(cmd, "@conteudoEdicao", conteudoestaticoVO.conteudoEdicao));
			cmd.Parameters.Add(getParameter(cmd, "@nome", conteudoestaticoVO.nome));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", conteudoestaticoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", conteudoestaticoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", conteudoestaticoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", conteudoestaticoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static long newConteudoestatico(ConteudoestaticoVO conteudoestaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO conteudoestatico ");
			query.AppendLine("  ( conteudo, conteudoEdicao, nome, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
			query.AppendLine("VALUES ( @conteudo, @conteudoEdicao, @nome, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@conteudo", conteudoestaticoVO.conteudo));
			cmd.Parameters.Add(getParameter(cmd, "@conteudoEdicao", conteudoestaticoVO.conteudoEdicao));
			cmd.Parameters.Add(getParameter(cmd, "@nome", conteudoestaticoVO.nome));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", conteudoestaticoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", conteudoestaticoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", conteudoestaticoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", conteudoestaticoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('conteudoestatico') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void delConteudoestatico(ConteudoestaticoVO conteudoestaticoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM conteudoestatico ");
			query.AppendLine("WHERE idConteudoEstatico=@idConteudoEstatico ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", conteudoestaticoVO.idConteudoEstatico));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}
	}
}
